import java.awt.Color;
import java.lang.Runnable;

import javax.swing.JOptionPane;

/**
* @file UpdateRequest.java
*
* @brief Diese Datei enthält die UpdateRequest-Klasse.
*
* @author Alrik Künne
*
* @date 01.06.2012 - erste Version
* @date 19.06.2012 - einige Veränderungen, Multi-Threading
**/

/** 
* @class UpdateRequest 
* 
* @brief bereitet einen neune Thread für GUI-Update vor
* 
* wird bei jedem Update der GUI als Thread vorbereitet und hat die Aufgabe die Oberfläche zu updaten
* Dieser Thread wird von Dispatch-Thread der Oberfläche abgearbeitet! 
* Thread nicht von Hand starten, sondern nur über die EventQueue!
*/ 
public class UpdateRequest implements Runnable {
	private Lift lift;
	private SimuFrame viewHouse;
	
	public UpdateRequest(Lift lift, SimuFrame viewHouse){
		this.viewHouse=viewHouse;
		this.lift=lift;
	} 

	public void run() {
		viewHouse.shaft.drawDoors(lift.getdoorcond(), lift.getetage());
		viewHouse.shaft.drawLift(lift.getBewegung(), lift.getetage());
		viewHouse.display.setEtage(lift.getetage());
		if(lift.ismov() && lift.getdriveup()){	
			viewHouse.display.showuparrow();
		}else if(lift.ismov() && !lift.getdriveup()){
			viewHouse.display.showdownarrow();
		}else if(!lift.ismov())
			viewHouse.display.hidearrows();
		viewHouse.liftpanel.cabineDisplay.setEtage(lift.getetage());
		viewHouse.generalpanel.setPassengers(lift.getAllPeople());
		viewHouse.shaft.setPersonen(lift.getAllPeople());
		
		//wenn das lift Objekt eine zahl ungleich 0 zurück gibt, so ist wird ein Dialog angezeigt, der anzeigt, wieviele Personen wieder aussteigen
		int overload=lift.getshowOverloadwithPeople();
		if(overload!=0){
			if (overload!=1)	
				JOptionPane.showMessageDialog( viewHouse, "Es steigen " + overload + " Personen aus." ,"Überlast", 2, null);
			else
				JOptionPane.showMessageDialog( viewHouse, "Es steigt eine Person aus." ,"Überlast", 2, null);
			lift.settimeinterruptflag(false);
			lift.overloadAction=null;
		}
		
		//das blinken der overload anzeige im Display
		if(lift.getDisplayOverload()){
			viewHouse.liftpanel.cabineDisplay.setText("ÜBERLAST");
			viewHouse.display.setText("ÜBERLAST");
		}
		
		//Anzegen der Zeit bis zur Abfahrt
			viewHouse.generalpanel.setInSeconds(lift.getInterruptTime());
		
		//Status
		if(lift.ismov()){
			viewHouse.generalpanel.State.setText("Status: fährt");
		}else{
			if(lift.getAllPeople()==0){
				viewHouse.generalpanel.State.setText("Status: frei");
			}else{
				viewHouse.generalpanel.State.setText("Status: steht");
			}
			
		}
		boolean hoch[]=lift.returnhoch();
		boolean runter[]=lift.returnrunter();
		int people[]=lift.returnpeoplerequest();
		for (int i=0;i<=8; i++){
			if(i<8){
				if (hoch[i]){
					viewHouse.levelpanels[8-i].Up.setBackground(Color.red);
				}else{
					viewHouse.levelpanels[8-i].Up.setBackground(Color.white);
				}
			}
			if(i>0){
				if (runter[i]){
					viewHouse.levelpanels[8-i].Down.setBackground(Color.red);
				}else{
					viewHouse.levelpanels[8-i].Down.setBackground(Color.white);
				}
			}
			if(people[i]==0){
				viewHouse.liftpanel.buttons[i].setBackground(Color.white);
			}else
				viewHouse.liftpanel.buttons[i].setBackground(Color.red);
		}
	}
}
